package com.ruoyi.merchant.service.impl;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.ruoyi.merchant.domain.ShopServiceType;
import com.ruoyi.merchant.mapper.ShopServiceTypeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.merchant.mapper.ServiceTypeMapper;
import com.ruoyi.merchant.domain.ServiceType;
import com.ruoyi.merchant.service.IServiceTypeService;

/**
 * 服务类别管理Service业务层处理
 *
 * @author zzy
 * @date 2024-09-12
 */
@Service
public class ServiceTypeServiceImpl implements IServiceTypeService {
    @Autowired
    private ServiceTypeMapper serviceTypeMapper;

    @Autowired
    private ShopServiceTypeMapper shopServiceTypeMapper;

    /**
     * 查询服务类别管理
     *
     * @param id 服务类别管理主键
     * @return 服务类别管理
     */
    @Override
    public ServiceType selectServiceTypeById(Long id) {
        return serviceTypeMapper.selectServiceTypeById(id);
    }

    /**
     * 查询服务类别管理列表
     *
     * @param serviceType 服务类别管理
     * @return 服务类别管理
     */
    @Override
    public List<ServiceType> selectServiceTypeList(ServiceType serviceType) {
        return serviceTypeMapper.selectServiceTypeList(serviceType);
    }

    /**
     * 新增服务类别管理
     *
     * @param serviceType 服务类别管理
     * @return 结果
     */
    @Override
    public int insertServiceType(ServiceType serviceType) {
        return serviceTypeMapper.insertServiceType(serviceType);
    }

    /**
     * 修改服务类别管理
     *
     * @param serviceType 服务类别管理
     * @return 结果
     */
    @Override
    public int updateServiceType(ServiceType serviceType) {
        return serviceTypeMapper.updateServiceType(serviceType);
    }

    /**
     * 批量删除服务类别管理
     *
     * @param ids 需要删除的服务类别管理主键
     * @return 结果
     */
    @Override
    public int deleteServiceTypeByIds(Long[] ids) {
        ShopServiceType shopServiceType = new ShopServiceType();
        List<ShopServiceType> shopServiceTypes = shopServiceTypeMapper.selectShopServiceTypeList(shopServiceType);
        // 将关联的 typeId 存储到一个 Set 中以提高查找效率
        Set<Long> usedTypeIds = new HashSet<>();
        for (ShopServiceType shopService : shopServiceTypes) {
            Long typeId = shopService.getTypeId();
            if (typeId != null) {
                usedTypeIds.add(typeId);
            }
        }
        // 检查要删除的 id 是否在使用中
        for (Long id : ids) {
            if (usedTypeIds.contains(id)) {
                // 如果有一个 id 在使用中，则返回错误码
                return -1;  // 表示有数据无法删除
            }
        }
        return serviceTypeMapper.deleteServiceTypeByIds(ids);
    }


    /**
     * 删除服务类别管理信息
     *
     * @param id 服务类别管理主键
     * @return 结果
     */
    @Override
    public int deleteServiceTypeById(Long id) {
        return serviceTypeMapper.deleteServiceTypeById(id);
    }
}
